import fitz
import re
from pathlib import Path


def pdf_to_markdown(pdf_path, md_path=None):
    if not md_path:
        pdf_path = Path(pdf_path)
        md_path = pdf_path.with_suffix('.md')

    doc = fitz.open(pdf_path)
    md_content = []

    for page_num, page in enumerate(doc, 1):
        blocks = page.get_text("blocks")
        blocks.sort(key=lambda b: (b[1], b[0]))  # 按坐标排序

        page_text = []
        for block in blocks:
            text = block[4].strip()
            if not text:
                continue

            # 处理标题（适配文档中的API标题格式）
            if re.match(r'^[A-Za-z0-9#]+', text) and len(text) < 50 and block[3] - block[1] > 20:
                page_text.append(f"### {text}")  # 文档中标题多为三级标题级别

            # 处理表格（修复索引错误）
            elif '|' in text:
                page_text.append(text)
                # 仅在列表长度足够时添加分隔线
                if len(page_text) >= 2 and not re.match(r'^[\| \-]+$', page_text[-2]):
                    cols = text.count('|') + 1
                    page_text.insert(-1, '|' + '---|' * cols)

            # 处理列表（适配文档中的参数说明列表）
            elif re.match(r'^»|名称|状态码', text):
                page_text.append(f"- {text}")

            # 普通文本直接添加
            else:
                page_text.append(text)

        md_content.append(f"\n\n<!-- 第{page_num}页 -->\n" + '\n'.join(page_text))

    with open(md_path, 'w', encoding='utf-8') as f:
        f.write('\n'.join(md_content))

    print(f"转换完成：{md_path}")
    doc.close()


if __name__ == "__main__":
    pdf_to_markdown("V8API文档.pdf")